//
//  Person.h
//  08-iOS9NewFeatures
//
//  Created by 曹曹 on 16/7/13.
//  Copyright © 2016年 曹曹. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject
// Nullability ((nonnull, nullable, null_resettable只能用在对象类型上))是在编译层上加了一些改动
// nonnull 声明的属性不能为空(getter和setter方法)
//@property (nonnull, nonatomic, copy) NSString *name;
// __nonnull 在声明属性的类型后加__nonnull
@property (nonatomic, copy) NSString *name;
// nullable 声明的属性可以为空
//@property (nullable, nonatomic, copy) NSString *gender;
@property (nonatomic, copy) NSString * _Nullable gender;
// 不可以像下面这样做(nonnull, nullable, null_resettable只能用在对象类型上)
//@property (nonnull, nonatomic, assign) NSInteger age;
// setter方法是nullable getter方法是nonnull
// 举例: UIViewController中的view属性
@property (null_resettable, nonatomic, strong) NSArray *friends;
@property (nonatomic, strong) NSDictionary *dic;
//NS_ASSUME_NONNULL_BEGIN
//NS_ASSUME_NONNULL_END
// 一般用于头文件.h 一般将声明包含起来
// 针对所有属性, 添加 nonnull 修饰
// 也就是说, 除了nullable和null_resetable需要加修饰, 其他都不需要加修饰
@end
NS_ASSUME_NONNULL_END